home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / NET / LAPB.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  5KB  |  151 lines

  1. #ifndef _LAPB_H
  2. #define _LAPB_H 
  3. #include <linux/lapb.h>
  4.  
  5. #define    LAPB_HEADER_LEN    20        /* LAPB over Ethernet + a bit more */
  6.  
  7. #define    LAPB_ACK_PENDING_CONDITION    0x01
  8. #define    LAPB_REJECT_CONDITION        0x02
  9. #define    LAPB_PEER_RX_BUSY_CONDITION    0x04
  10.  
  11. /* Control field templates */
  12. #define    LAPB_I        0x00    /* Information frames */
  13. #define    LAPB_S        0x01    /* Supervisory frames */
  14. #define    LAPB_U        0x03    /* Unnumbered frames */
  15.  
  16. #define    LAPB_RR        0x01    /* Receiver ready */
  17. #define    LAPB_RNR    0x05    /* Receiver not ready */
  18. #define    LAPB_REJ    0x09    /* Reject */
  19.  
  20. #define    LAPB_SABM    0x2F    /* Set Asynchronous Balanced Mode */
  21. #define    LAPB_SABME    0x6F    /* Set Asynchronous Balanced Mode Extended */
  22. #define    LAPB_DISC    0x43    /* Disconnect */
  23. #define    LAPB_DM        0x0F    /* Disconnected mode */
  24. #define    LAPB_UA        0x63    /* Unnumbered acknowledge */
  25. #define    LAPB_FRMR    0x87    /* Frame reject */
  26.  
  27. #define LAPB_ILLEGAL    0x100    /* Impossible to be a real frame type */
  28.  
  29. #define    LAPB_SPF    0x10    /* Poll/final bit for standard LAPB */
  30. #define    LAPB_EPF    0x01    /* Poll/final bit for extended LAPB */
  31.  
  32. #define    LAPB_FRMR_W    0x01    /* Control field invalid    */
  33. #define    LAPB_FRMR_X    0x02    /* I field invalid        */
  34. #define    LAPB_FRMR_Y    0x04    /* I field too long        */
  35. #define    LAPB_FRMR_Z    0x08    /* Invalid N(R)            */
  36.  
  37. #define    LAPB_POLLOFF    0
  38. #define    LAPB_POLLON    1
  39.  
  40. /* LAPB C-bit */
  41. #define LAPB_COMMAND    1
  42. #define LAPB_RESPONSE    2
  43.  
  44. #define    LAPB_ADDR_A    0x03
  45. #define    LAPB_ADDR_B    0x01
  46. #define    LAPB_ADDR_C    0x0F
  47. #define    LAPB_ADDR_D    0x07
  48.  
  49. /* Define Link State constants. */
  50. enum {
  51.     LAPB_STATE_0,    /* Disconnected State        */
  52.     LAPB_STATE_1,    /* Awaiting Connection State    */
  53.     LAPB_STATE_2,    /* Awaiting Disconnection State    */
  54.     LAPB_STATE_3,    /* Data Transfer State        */
  55.     LAPB_STATE_4    /* Frame Reject State        */
  56. };
  57.  
  58. #define    LAPB_DEFAULT_MODE        (LAPB_STANDARD | LAPB_SLP | LAPB_DTE)
  59. #define    LAPB_DEFAULT_WINDOW        7        /* Window=7 */
  60. #define    LAPB_DEFAULT_T1            (5 * HZ)    /* T1=5s    */
  61. #define    LAPB_DEFAULT_T2            (1 * HZ)    /* T2=1s    */
  62. #define    LAPB_DEFAULT_N2            20        /* N2=20    */
  63.  
  64. #define    LAPB_SMODULUS    8
  65. #define    LAPB_EMODULUS    128
  66.  
  67. /*
  68.  *    Information about the current frame.
  69.  */
  70. struct lapb_frame {
  71.     unsigned short        type;        /* Parsed type        */
  72.     unsigned short        nr, ns;        /* N(R), N(S)        */
  73.     unsigned char        cr;        /* Command/Response    */
  74.     unsigned char        pf;        /* Poll/Final        */
  75.     unsigned char        control[2];    /* Original control data*/
  76. };
  77.  
  78. /*
  79.  *    The per LAPB connection control structure.
  80.  */
  81. typedef struct lapb_cb {
  82.     struct lapb_cb        *next;
  83.     void            *token;
  84.  
  85.     /* Link status fields */
  86.     unsigned int        mode;
  87.     unsigned char        state;
  88.     unsigned short        vs, vr, va;
  89.     unsigned char        condition;
  90.     unsigned short        n2, n2count;
  91.     unsigned short        t1, t2;
  92.     struct timer_list    t1timer, t2timer;
  93.  
  94.     /* Internal control information */
  95.     struct sk_buff_head    write_queue;
  96.     struct sk_buff_head    ack_queue;
  97.     unsigned char        window;
  98.     struct lapb_register_struct callbacks;
  99.  
  100.     /* FRMR control information */
  101.     struct lapb_frame    frmr_data;
  102.     unsigned char        frmr_type;
  103. } lapb_cb;
  104.  
  105. /* lapb_iface.c */
  106. extern void lapb_connect_confirmation(lapb_cb *, int);
  107. extern void lapb_connect_indication(lapb_cb *, int);
  108. extern void lapb_disconnect_confirmation(lapb_cb *, int);
  109. extern void lapb_disconnect_indication(lapb_cb *, int);
  110. extern int  lapb_data_indication(lapb_cb *, struct sk_buff *);
  111. extern int  lapb_data_transmit(lapb_cb *, struct sk_buff *);
  112.  
  113. /* lapb_in.c */
  114. extern void lapb_data_input(lapb_cb *, struct sk_buff *);
  115.  
  116. /* lapb_out.c */
  117. extern void lapb_kick(lapb_cb *);
  118. extern void lapb_transmit_buffer(lapb_cb *, struct sk_buff *, int);
  119. extern void lapb_establish_data_link(lapb_cb *);
  120. extern void lapb_enquiry_response(lapb_cb *);
  121. extern void lapb_timeout_response(lapb_cb *);
  122. extern void lapb_check_iframes_acked(lapb_cb *, unsigned short);
  123. extern void lapb_check_need_response(lapb_cb *, int, int);
  124.  
  125. /* lapb_subr.c */
  126. extern void lapb_clear_queues(lapb_cb *);
  127. extern void lapb_frames_acked(lapb_cb *, unsigned short);
  128. extern void lapb_requeue_frames(lapb_cb *);
  129. extern int  lapb_validate_nr(lapb_cb *, unsigned short);
  130. extern void lapb_decode(lapb_cb *, struct sk_buff *, struct lapb_frame *);
  131. extern void lapb_send_control(lapb_cb *, int, int, int);
  132. extern void lapb_transmit_frmr(lapb_cb *);
  133.  
  134. /* lapb_timer.c */
  135. extern void lapb_start_t1timer(lapb_cb *);
  136. extern void lapb_start_t2timer(lapb_cb *);
  137. extern void lapb_stop_t1timer(lapb_cb *);
  138. extern void lapb_stop_t2timer(lapb_cb *);
  139. extern int  lapb_t1timer_running(lapb_cb *);
  140.  
  141. /*
  142.  * Debug levels.
  143.  *    0 = Off
  144.  *    1 = State Changes
  145.  *    2 = Packets I/O and State Changes
  146.  *    3 = Hex dumps, Packets I/O and State Changes.
  147.  */
  148. #define    LAPB_DEBUG    0
  149.  
  150. #endif
  151.